package wxapp

import (
	"wxsdk/wxpay/core"
	. "wxsdk/wxpay"
)

//1.创建Unifieldrequest结构体，存放要使用的数据，omitempty 表示该字段选填，否则为必填

type UnifieldRequest struct {
	Appid           string   `xml:"appid"`                 //公众账号ID
	MchId           string   `xml:"mch_id"`                //商户号
	SubAppid        string   `xml:"sub_appid,omitempty"`   //小程序的APPID,当前调起支付的小程序APPID(服务商特有参数)
	SubMchId        string   `xml:"sub_mch_id,omitempty"`  //微信支付分配的子商户号(服务商特有参数)
	DeviceInfo      string   `xml:"device_info,omitempty"` //设备号
	NonceStr        string   `xml:"nonce_str"`             //随机字符串
	Sign            string   `xml:"sign"`                  //签名
	SignType        string   `xml:"sign_type,omitempty"`   //签名类型
	Body            string   `xml:"body"`                  //商品描述
	Detail          string   `xml:"detail,omitempty"`      //商品详情
	Attach          string   `xml:"attach,omitempty"`      //附加数据
	OutTradeNo      string   `xml:"out_trade_no"`          //商户订单号
	FeeType         string   `xml:"fee_type,omitempty"`    //货币类型
	TotalFee        string   `xml:"total_fee"`             //总金额
	SpbillCreateIp  string   `xml:"spbill_create_ip,omitempty"` //终端IP
	TimeStart       string   `xml:"time_start,omitempty"`  //交易起始时间
	TimeExpire      string   `xml:"time_expire,omitempty"` //交易结束时间
	GoodsTag        string   `xml:"goods_tag,omitempty"`   //商品标记
	NotifyUrl       string   `xml:"notify_url"`            //通知地址
	TradeType       string   `xml:"trade_type"`            //交易类型
	LimitPay        string   `xml:"limit_pay,omitempty"`   //no_credit--指定不能使用信用卡支付
	Openid          string   `xml:"openid,omitempty"`      //用户标识
	SubOpenid       string   `xml:"sub_openid,omitempty"`  //用户子标识(服务商特有参数)
	//
	ProfitSharing   string   `xml:"profit_sharing,omitempty"`  //是否指定服务商分账
}

// 统一下单
type UnifiedOrderResponse struct {
	BaseResponse `xml:",innerXml,omitempty"`
	TradeType   string `xml:"trade_type"` // 交易类型
	PrepayId    string `xml:"prepay_id"`  // 预支付交易会话标识
	//CodeUrl   string `xml:"code_url,omitempty"`   // 二维码链接
}

// 统一下单
func  Unifield(appId,mchId,subAppid,subMchId,appSecret,wxPayNotify,orderIdStr,body,payFeeStr,openId,subOpenid,attach,share string) (UnifiedOrderResponse,error){
	client := core.GetWxPayClient(appId,mchId,appSecret,nil)
	var rsp UnifiedOrderResponse
	var req = new(UnifieldRequest)
	if len(subAppid) > 0 {
	   req.SubAppid = subAppid
	}
	if len(subMchId) > 0 {
	   req.SubMchId = subMchId
	}
	req.NotifyUrl = wxPayNotify
	req.TradeType = "JSAPI"              // 支持 JSAPI， NATIVE ，APP
	req.OutTradeNo = orderIdStr         // 商户订单号
	req.Body = body                       // 商品描述
	req.TotalFee = payFeeStr             // 单位是分
	if len(openId) > 0 {
	   req.Openid = openId
	}
	if len(subOpenid) > 0 {
	   req.SubOpenid = subOpenid
	}
	req.Attach = attach
	if share == "Y" {
	   req.ProfitSharing = "Y"
	}
	err := client.Excute(UnifiedOrderUrl, req, &rsp)
    if err != nil {
		return rsp, err
	}
	return rsp, nil
}
